Add a basic clipboard test
authorMatthias Clasen <mclasen@redhat.com>
Mon, 22 Jun 2020 20:36:22 +0000 (16:36 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 22 Jun 2020 20:55:01 +0000 (16:55 -0400)
This is not reproducing the failure I'm after, unfortunately.

testsuite/gdk/clipboard.c [new file with mode: 0644]
testsuite/gdk/meson.build

diff --git a/testsuite/gdk/clipboard.c b/testsuite/gdk/clipboard.c
new file mode 100644 (file)
index 0000000..7418994
--- /dev/null
@@ -0,0 +1,83 @@
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+static void
+text_received (GObject *source,
+               GAsyncResult *res,
+               gpointer data)
+{
+  GdkClipboard *clipboard = GDK_CLIPBOARD (source);
+  gboolean *done = data;
+  GError *error = NULL;
+  char *text;
+
+  text = gdk_clipboard_read_text_finish (clipboard, res, &error);
+
+  g_assert_no_error (error);
+  g_assert_cmpstr (text, ==, "testing, 1, 2");
+
+  g_free (text);
+
+  *done = TRUE;
+
+  g_main_context_wakeup (NULL);
+}
+
+static void
+test_clipboard_basic (void)
+{
+  GdkDisplay *display;
+  GdkClipboard *clipboard;
+  GdkContentFormats *formats;
+  GdkContentProvider *content;
+  gboolean done;
+  gboolean ret;
+  GValue value = G_VALUE_INIT;
+  GError *error = NULL;
+
+  display = gdk_display_get_default ();
+  clipboard = gdk_display_get_clipboard (display);
+
+  g_assert_true (gdk_clipboard_get_display (clipboard) == display);
+
+  gdk_clipboard_set_text (clipboard, "testing, 1, 2");
+
+  g_assert_true (gdk_clipboard_is_local (clipboard));
+
+  formats = gdk_clipboard_get_formats (clipboard);
+
+  g_assert_true (gdk_content_formats_contain_gtype (formats, G_TYPE_STRING));
+  g_assert_true (gdk_content_formats_contain_mime_type (formats, "text/plain"));
+
+  done = FALSE;
+
+  gdk_clipboard_read_text_async (clipboard, NULL, text_received, &done);
+
+  while (!done)
+    g_main_context_iteration (NULL, TRUE);
+
+  content = gdk_clipboard_get_content (clipboard);
+  g_assert_nonnull (content);
+
+  g_value_init (&value, G_TYPE_STRING);
+  ret = gdk_content_provider_get_value (content, &value, &error);
+  g_assert_true (ret);
+  g_assert_no_error (error);
+  g_assert_true (G_VALUE_TYPE (&value) == G_TYPE_STRING);
+  g_assert_cmpstr (g_value_get_string (&value), ==, "testing, 1, 2");
+
+  g_value_unset (&value);
+}
+
+int
+main (int argc, char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  gtk_init ();
+
+  g_test_add_func ("/clipboard/basic", test_clipboard_basic);
+
+  return g_test_run ();
+}
index 75b6c078a06f2a9e540014e617dffea24f512e51..003e77172b3d195d95d75992cb3947d7ec5349ef 100644 (file)
@@ -3,6 +3,7 @@ testdatadir = join_paths(installed_test_datadir, 'gdk')
 
 tests = [
   'cairo',
+  'clipboard',
   'display',
   'encoding',
   'keysyms',